home *** CD-ROM | disk | FTP | other *** search
/ NeXT Education Software Sampler 1992 Fall / NeXT Education Software Sampler 1992 Fall.iso / Programming / Source / Fitts / MainController.m < prev    next >
Encoding:
Text File  |  1992-07-28  |  4.7 KB  |  199 lines

  1.  
  2. /* Generated by Interface Builder */
  3.  
  4. #import <appkit/Slider.h>
  5. #import <appkit/Form.h>
  6. #import <appkit/color.h>
  7. #import <appkit/NXColorWell.h>
  8. #import "MainController.h"
  9. #import "ExpController.h"
  10.  
  11.  
  12. @implementation MainController
  13.  
  14.  
  15. - appDidInit:sender
  16. {
  17.     menuParms.option1 = 25.0;
  18.     menuParms.option2 = 5.0;
  19.     menuParms.option3 = 3.0;
  20.     menuParms.menu_type = VERTICAL;
  21.     menuParms.num_items = 5;
  22.  
  23.     menuParms.unselected_colour = NX_COLORLTGRAY;
  24.     menuParms.selected_colour   = NX_COLORDKGRAY;    
  25.  
  26.     [menuView setMenuParms:&menuParms];
  27.     [menuView setHitItem:0];
  28.     
  29.     return self;
  30. }
  31.  
  32.  
  33. - changeNumberItems:sender
  34. {
  35.     int new_value = [sender intValue];
  36.         
  37.     if ( new_value != menuParms.num_items )
  38.     {
  39.         if ( sender == numberItemsForm )
  40.             [numberItemsSlider setIntValue:new_value];
  41.         else
  42.             [numberItemsForm setIntValue:new_value];
  43.         
  44.         menuParms.num_items = new_value;
  45.     
  46.     if ( menuParms.menu_type == CIRCLE_PIE )
  47.            [[itemOptionSliders findCellWithTag:0]
  48.                                   setMaxValue:(360/menuParms.num_items)];
  49.  
  50.     [menuView setMenuParms:&menuParms];
  51.     }
  52.     
  53.     return self;
  54. }
  55.  
  56.  
  57. - computeArea
  58. {
  59.     float item_area;
  60.     
  61.     switch ( menuParms.menu_type )
  62.     {
  63.         case VERTICAL:
  64.     case CIRCLE_RECTANGLE:
  65.         item_area = menuParms.option1 * menuParms.option2;
  66.         break;
  67.         
  68.     case CIRCLE_PIE:
  69.         item_area = ((3.14159*(menuParms.option2+menuParms.option3) * 
  70.                               (menuParms.option2+menuParms.option3)) -
  71.                      (3.14159*menuParms.option2*menuParms.option2)) /
  72.                                        (360.0/menuParms.option1);
  73.         break;
  74.     
  75.     default:
  76.         fprintf(stderr, "computeArea: bad menu type\n");
  77.         return self;
  78.     }
  79.     
  80.     [areaTextField setFloatValue:item_area];
  81.     
  82.     return self;
  83. }
  84.  
  85. - changeUnselectedColour:sender
  86. {
  87.     menuParms.unselected_colour = [sender color];
  88.     [menuView setMenuParms:&menuParms];
  89.     
  90.     return self;
  91. }
  92.  
  93. - changeSelectedColour:sender
  94. {
  95.     menuParms.selected_colour = [sender color];
  96.     [menuView setMenuParms:&menuParms];
  97.     
  98.     return self;
  99. }
  100.  
  101.  
  102.  
  103. - changeMenuType:sender
  104. {
  105.     int new_type = [sender selectedTag];
  106.  
  107.     if ( new_type != menuParms.menu_type )
  108.     {
  109.         switch ( new_type )
  110.     {
  111.         case VERTICAL:
  112.             [[itemOptionSliders findCellWithTag:0] setMaxValue:100];
  113.             [[itemOptionSliders findCellWithTag:1] setMaxValue:50];
  114.         [[itemOptionSliders findCellWithTag:2] setMaxValue:25];
  115.             [itemOptionForm setTitle:"Width:" at:0];
  116.         [itemOptionForm setTitle:"Height:" at:1];
  117.         [itemOptionForm setTitle:"Distance:" at:2];
  118.             break;
  119.         
  120.         case CIRCLE_PIE:
  121.             [[itemOptionSliders findCellWithTag:0]
  122.                                     setMaxValue:(360/menuParms.num_items)];
  123.             [[itemOptionSliders findCellWithTag:1] setMaxValue:50];
  124.         [[itemOptionSliders findCellWithTag:2] setMaxValue:50];
  125.             [itemOptionForm setTitle:"Angle covered:" at:0];
  126.         [itemOptionForm setTitle:"Radius covered:" at:1];
  127.         [itemOptionForm setTitle:"Menu radius:" at:2];
  128.             break;
  129.         
  130.         case CIRCLE_RECTANGLE:
  131.             [[itemOptionSliders findCellWithTag:0] setMaxValue:100];
  132.             [[itemOptionSliders findCellWithTag:1] setMaxValue:100];
  133.         [[itemOptionSliders findCellWithTag:2] setMaxValue:50];
  134.             [itemOptionForm setTitle:"Width:" at:0];
  135.         [itemOptionForm setTitle:"Height:" at:1];
  136.         [itemOptionForm setTitle:"Menu radius:" at:2];
  137.             break;
  138.     }
  139.     
  140.         menuParms.menu_type = new_type;
  141.     
  142.     [menuView setMenuParms:&menuParms];
  143.     
  144.     [self computeArea];
  145.     }
  146.     
  147.     return self;
  148. }
  149.  
  150.  
  151. - changeMenuSizing:sender
  152. {
  153.     float new_value = [sender floatValue];
  154.     int   changed_option = [sender selectedTag];
  155.  
  156.     if ( sender == itemOptionForm )
  157.         /* a field was changed, so update slider */
  158.         [[itemOptionSliders findCellWithTag:changed_option]
  159.                                                 setFloatValue:new_value];
  160.     else
  161.         /* a slider was changed, so update cell */
  162.         [[itemOptionForm findCellWithTag:changed_option] 
  163.                                                 setFloatValue:new_value];
  164.  
  165.     switch ( changed_option )
  166.     {
  167.         case 0: menuParms.option1 = new_value;
  168.             break;
  169.     case 1: menuParms.option2 = new_value;
  170.         break;
  171.     case 2: menuParms.option3 = new_value;
  172.         break;
  173.     }
  174.     
  175.     [menuView setMenuParms:&menuParms];
  176.     [self computeArea];
  177.  
  178.     return self;
  179. }
  180.  
  181.  
  182. - goButton:sender
  183. {
  184.     int num_trials;
  185.     char *experiment_id;
  186.     
  187.     num_trials = [trialsField intValue];
  188.     experiment_id = (char *) [expIDField stringValue];
  189.     
  190.     fprintf(stderr, "GO button hit, num_trials:%d expID:%s.\n", num_trials, experiment_id);
  191.     
  192.     [expController performExperiment:&menuParms :num_trials :experiment_id];
  193.     
  194.     return self;
  195. }
  196.  
  197.  
  198. @end
  199.